Skip to content

RFC: تخزين ساكن مسمّى + سمات التخزين (@رمز/@متطاير/@محزوم/بايتات) — اللبنة 3.14#39

Open
SalehKadah wants to merge 1 commit into
mainfrom
rfc/named-static-storage
Open

RFC: تخزين ساكن مسمّى + سمات التخزين (@رمز/@متطاير/@محزوم/بايتات) — اللبنة 3.14#39
SalehKadah wants to merge 1 commit into
mainfrom
rfc/named-static-storage

Conversation

@SalehKadah

Copy link
Copy Markdown
Contributor

ملخّص

تمكين ص من تعريف مخزن ساكن مسمّى برمز رابط مستقرّ ومُصدَّر في .bss/.rodata،
مع 4 بدائيّات متلازمة: @رمز("اسم") (رمز مُصدَّر)، إصلاح @متطاير على التصريح
(مكسور حاليًّا)، @محزوم (رصّ)، وحرفيّة بايتات(...) (كتلة .rodata).

السياق

اللبنة 3.14 من إطفاء C، تكمّل عنوان_رمز (3.13، PR #224). بعد أن صارت ص تأخذ
عنوان الرمز، هذا المقترح يجعلها تعرّف المخزن نفسه — فتُملّك النواةَ عدّاداتها
(bee_probe_hits…) وخريطتها البتّيّة وأرشيفها بدل مخازن C.

غرض كلّ بدائيّة

  • @رمز("bee_x") — الرافعة الأمّ: رمز مُصدَّر ثابت يلتقي عليه أكعاب المقاطعة
    (C) + عنوان_رمز + عقد ABI. بدونه المخزن باسم داخليّ مُشوَّه لا يصلح أرضيّةً مشتركة.
  • @متطاير (إصلاح) — صحّة: العدّادات يكتبها سياق مقاطعة ويقرؤها فحص في حلقة؛
    بلا volatile يُخبّئ المُحسِّن القراءة ⇒ حلقة أبديّة. العلم يُسقَط اليوم في
    statement_advanced.cpp:159.
  • @محزوم — مفتاح ترحيل الواصفات: تخطيط IDTR/GDTR/البوّابات يفرضه المعالج؛
    بلا رصّ يحشو المترجم ⇒ عطل. isPacked مقيَّد false حاليًّا.
  • بايتات(...) — جداول .rodata مملوكة: أرشيف SFA1 وخريطة set-1 كثابت حقيقيّ
    برمز مستقرّ، لا مصفوفة كومة.

النموذج القائم (من الاستكشاف)

ص تملك globals حقيقيّة (top-level متغيرGlobalVariable في .bss/.rodata)
والبنية التحتيّة للأقسام (LLVMCustomSections, setSection) وتمثيل ConstantDataArray
— لكنّها يتيمة/داخليّة بلا واجهة لغويّة مستقرّة. المقترح يصل هذه البنية بصياغة.

النطاق

الأربع بدائيّات كاملةً (الخيار الأقوى): حذف أيٍّ منها يُبقي صنفًا كاملًا من مخازن C.
@قسم(".name") الصريح والـstatics المحلّيّة والتهيئة الثابتة المحسوبة — مؤجَّلة.

أسئلة للنقاش

  1. صياغة بايتات: مدمج بايتات(...) أم مصفوفة ثابتة مكتوبة.
  2. هل يُفصَل @محزوم (أضعفها ترابطًا) أم يبقى ضمن الحزمة.
  3. @رمز على المستوى الأعلى فقط أم يشمل statics محلّيّة.

🤖 Generated with Claude Code

…ضمَّنة

اللبنة 3.14 من إطفاء C. تمكّن ص من تعريف مخزن ساكن مسمّى برمز رابط مستقرّ مُصدَّر
في .bss/.rodata مع سمات: @رمز("اسم") رمز مُصدَّر، إصلاح @متطاير على التصريح،
@محزوم رصّ، وحرفيّة بايتات(...) كتلة .rodata. يكمّل عنوان_رمز (3.13): ص تعرّف
المخزن وتأخذ عنوانه بالاسم نفسه ⇒ تُملّك النواة عدّاداتها/خريطتها/أرشيفها بدل C.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
SalehKadah added a commit to sadlang/s-programming-language that referenced this pull request Jul 21, 2026
…، إطفاء C)

البدائيّة الثالثة من RFC تخزين ساكن (sadlang/rfcs#39): بيانات مضمَّنة.
@رمز("bee_initrd") ثابت أرشيف = بايتات(0x53، ...) ⇒ @bee_initrd = constant
[N x i8] c"..." في .rodata برمز مُصدَّر، يأخذ عنوان_رمز عنوانه. لجداول النواة
(أرشيف SFA1، خرائط المفاتيح) المملوكة لـص بدل C.

- Phase 1.5: كشف مُهيّئ CallExpr باسم بايتات ⇒ استخراج البايتات (0–255،
  hex/oct/bin/dec، رفض غير الحرفيّ/الفارغ/خارج المدى) في SIRGlobalVariable.byteData.
- الخلفيّة: ConstantDataArray في .rodata (isConstant⇒rodata، متغير⇒data) بربط
  @رمز المُصدَّر + حارس تصادم SEM022. محاذاة 1.
- تخطّي دفع التصريح لـtopLevelStatements (تفادي معالجة بايتات كنداء غير معرّف).

اختبار 8 حالات بايتات (rodata ثابت + محتوى c"SAD" + عنونة بعنوان_رمز + خارج
المدى + فارغ + غير ثابت⇒data). 31/31 حرّ أخضر، gen --check أخضر.

مراجعة أميليا: الجوهر سليم (استخراج/مدى/ConstantDataArray/SEM022/isConstant/
مستضاف مؤكَّدة)؛ أُصلح الفارغ (C2) + ثابت مسمّى kByteBlobBuiltin (S1). قيود
موثَّقة خارج نطاق نهلة: بايتات مع صدّر/كتعبير داخل دالّة/قراءة بالاسم مباشرةً.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
SalehKadah added a commit to sadlang/s-programming-language that referenced this pull request Jul 21, 2026
…C) (#225)

* مترجم: تخزين ساكن مسمّى — @رمز("اسم") + لصيقة «متطاير» (اللبنة 3.14، إطفاء C)

بدائيّتان من RFC تخزين ساكن (sadlang/rfcs#39) تمكّنان ص من تعريف مخزن ساكن
عامّ برمز رابط مستقرّ مُصدَّر ومتطاير — تكميلًا لـعنوان_رمز (3.13):

- @رمز("bee_x") متغير/ثابت ⇒ GlobalVariable بـExternalLinkage واسم bee_x بدل
  الاسم العربيّ المُشوَّه InternalLinkage (مفتاح namedValues يبقى الاسم العربيّ
  فتُحَل مراجع ص). حارس تصادم SEM022: اسم مكرّر أو محجوز لزمن التشغيل
  (memset/malloc/__sad_*) ⇒ خطأ مفهوم بدل إعادة تسمية الرابط الصامتة.
- «متطاير» لصيقة لاحقة عربيّة سليمة: «متغير متطاير عداد = 0» (الموصوف ثمّ الصفة)
  بدل توجيه @متطاير المحذوف (calque إنجليزيّ، خالف قاعدة الصفة). كلمة سياقيّة
  تُقبَل KEYWORD_VOLATILE أو IDENTIFIER. تمريرة لاحقة على الوحدة تعلّم كلّ
  load/store يمسّ المخزن volatile (متينة ضدّ تعدّد مسارات إصدار الأحمال).

6 نقاط تماسّ: statements.h (linkSymbol/isVolatile) + sir_module.h
(linkName/isVolatile+getLinkName) + parser (لصيقة متطاير + فرع @رمز + حذف
@متطاير من isDirectiveKeyword) + sir_builder_module (نقل السمات) +
classes_vtables_ops (ExternalLinkage + حارس SEM022 + تمريرة volatile) +
mem_load/store/arith_resolve (وسم موضعيّ داعم). خطأ SEM022 + توجيه @رمز في
directives.yaml (SoT).

اختبار 9 حالات (test_static_storage.py): رمز مُصدَّر/ثابت rodata، volatile
كتابة/قراءة، تركيب @رمز+متطاير، ثابت متطاير، تصادم محجوز/مكرّر (SEM022)،
حارس العاديّ يبقى internal. 26/26 حرّ أخضر، gen --check أخضر.

مراجعة أميليا: صفر عيب يكسر المسار؛ أُصلح تصادم الرمز الصامت (SEM022، البند
الحاسم)؛ حُذف كود VolatileVarDeclStmt الميت. دَين موثَّق: متطاير على تصريح
متعدّد وعنصر مصفوفة عبر GEP خارج النطاق الحاليّ.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* مترجم: بايتات(...) — كتلة بايتات ثابتة مسمّاة في .rodata (اللبنة 3.14، إطفاء C)

البدائيّة الثالثة من RFC تخزين ساكن (sadlang/rfcs#39): بيانات مضمَّنة.
@رمز("bee_initrd") ثابت أرشيف = بايتات(0x53، ...) ⇒ @bee_initrd = constant
[N x i8] c"..." في .rodata برمز مُصدَّر، يأخذ عنوان_رمز عنوانه. لجداول النواة
(أرشيف SFA1، خرائط المفاتيح) المملوكة لـص بدل C.

- Phase 1.5: كشف مُهيّئ CallExpr باسم بايتات ⇒ استخراج البايتات (0–255،
  hex/oct/bin/dec، رفض غير الحرفيّ/الفارغ/خارج المدى) في SIRGlobalVariable.byteData.
- الخلفيّة: ConstantDataArray في .rodata (isConstant⇒rodata، متغير⇒data) بربط
  @رمز المُصدَّر + حارس تصادم SEM022. محاذاة 1.
- تخطّي دفع التصريح لـtopLevelStatements (تفادي معالجة بايتات كنداء غير معرّف).

اختبار 8 حالات بايتات (rodata ثابت + محتوى c"SAD" + عنونة بعنوان_رمز + خارج
المدى + فارغ + غير ثابت⇒data). 31/31 حرّ أخضر، gen --check أخضر.

مراجعة أميليا: الجوهر سليم (استخراج/مدى/ConstantDataArray/SEM022/isConstant/
مستضاف مؤكَّدة)؛ أُصلح الفارغ (C2) + ثابت مسمّى kByteBlobBuiltin (S1). قيود
موثَّقة خارج نطاق نهلة: بايتات مع صدّر/كتعبير داخل دالّة/قراءة بالاسم مباشرةً.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* مترجم: إعادة توليد قواعد TextMate بعد تغيير التوجيهات (3.14)

انجراف sad.tmLanguage.json عن language-truth: حُذف @متطاير وأُضيف @رمز
في directives.yaml. أُعيد التوليد عبر gen_tmgrammar.py.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant